#ifndef PARTICLES
#define PARTICLES

/**
 * class Particle 
 * defines membrane or inner helping particle of cell
 * cell mass is divided between its particles
 * particles are bases for voigt elements
 * which create visco-elastic net between them
 */

//-----------------------------------------------------------
//TODO make different objects for membrane and inner particle?
//-----------------------------------------------------------

class Particle {

private:
	/** unique id within one cell */
	int id;

	/** id of cell in which particle is located */
	int cellId;
	
	/** coordinates of particle in 3D space */
	double x;
	double y;
	double z;

	/** velocity */
	double vx;
	double vy;
	double vz;

    /** 
	 * external force vector applied to particle 
	 * defautl is zero
	 */
  double externalFx;
	double externalFy;
	double externalFz;

	//-------------------------------------------------
	// TODO: something representing cell mass and substances
	//-------------------------------------------------


public:
	/** constructor */
	Particle();

	/**
	 * parametrized constructor
	 * @param x x coordinate
	 * @param y y coordinate
	 * @param z z coordinate
	 * @param id wanted id of particle within a cell
	 * @param cellId id of mother cell
	 */
	Particle(double x, double y, double z, int id, int cellId );

	/** destructor */
	~Particle();

	/** set new position of particle */
	void setPosition(double x, double y, double z);

	/** set new velocity */
	void setVelocity( double vx, double vy, double vz );

	/** set external forces */
	void setExternalForce(double fx, double fy, double fz );

	/** return id of particle */
	int getId();
	
	/** return id of cell in which particle is located */
	int getCellId();



	/** get x coordinate */
	double getX();

	/** get y coordinate */
	double getY();

	/** get z coordinate */
	double getZ();



	/** get x component of velocity vector */
	double getVx();

	/** get y component of velocity vector */
	double getVy();

	/** get z component of velocity vector */
	double getVz();


	
	/** get x component of external force vector */
	double getExtFx();

	/** get y component of external force vector */
	double getExtFy();

	/** get z component of external force vector */
	double getExtFz();


};



#endif // PARTICLES